#include <bits/stdc++.h>

using namespace std;

const int N = 105;
using ll = long long;
int c[N], t[N]; // t数组代表动物i被访问了几次
vector<int>g[N];// 动物园能观赏的动物id数组
ll  res = 1e18;
int n, m;
void dfs(int id, int cnt, ll cost){
    //动物园编号  这个动物园还能看几次  已经花了多少钱
    if(id == n+1){
        int ok = 1;
        for(int i = 1; i <= m; i++){
            if(t[i] < 2) ok = 0;
        }
        if(ok == 1) res = min(res, cost);
        return ;
    }
    dfs(id+1, 2, cost);//不看i动物园
    //再看一次i动物园
    if(cnt != 0){//如果还有看的次数
        for(auto x: g[id]) t[x]++;
        dfs(id, cnt-1, cost + c[id]);//看一次i号动物园
        for(auto x: g[id]) t[x]--;
    }
}

int main(){
    cin >> n >> m;
    for(int i = 1; i <= n; i++) cin >> c[i];
    for(int i = 1; i <= m; i++){
        int k;
        cin >> k;
        while(k--){
            int x;
            cin >> x;
            g[x].push_back(i);
        }
    }
    dfs(1, 2, 0);
    cout << res << endl;

    return 0;
}